import { Component, OnInit } from '@angular/core';

declare var $: any;

@Component({
    selector: 'app-my-app',
    templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
    constructor() {}

    ngOnInit() {
        $.material.init();
    }
}
Date.prototype.format = function(fmt) {
    const o = {
        'M+': this.getMonth() + 1, // 月份
        'd+': this.getDate(), // 日
        'h+': this.getHours(), // 小时
        'H+': this.getHours(), // 小时
        'm+': this.getMinutes(), // 分
        's+': this.getSeconds(), // 秒
        'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
        'S+': this.getMilliseconds() // 毫秒
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(
            RegExp.$1,
            ('' + this.getFullYear()).substr(4 - RegExp.$1.length)
        );
    }
    for (const k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
            fmt = fmt.replace(
                RegExp.$1,
                RegExp.$1.length === 1
                    ? o[k]
                    : ('00' + o[k]).substr(0 - RegExp.$1.length)
            );
        }
    }
    return fmt;
};
Date.prototype.parse = function(str: string, fmt: string): Date {
    // 用法:
    // alert(
    //     new Date().parse(
    //         '公元91年02月03日03点04分05秒999',
    //         '公元yy年MM月dd日HH点mm分ss秒SSS'
    //     )
    // );
    // alert(new Date().parse('06/24/2018', 'MM/dd/yyyy'));
    let datetime = new Date();
    let posKey = {};
    let newFmt: string = fmt;
    newFmt = newFmt.replace(/\//, '\\/');
    if (fmt.indexOf('d') > -1) {
        posKey[fmt.indexOf('d')] = 'd';
        newFmt = newFmt.replace(/d+/, '(\\d+)');
    }
    if (fmt.indexOf('s') > -1) {
        posKey[fmt.indexOf('s')] = 's';
        newFmt = newFmt.replace(/s+/, '(\\d+)');
    }
    newFmt = newFmt.replace(/\s/, '\\s');
    if (fmt.indexOf('S') > -1) {
        posKey[fmt.indexOf('S')] = 'S';
        newFmt = newFmt.replace(/S+/, '(\\d+)');
    }
    if (fmt.indexOf('y') > -1) {
        posKey[fmt.indexOf('y')] = 'y';
        newFmt = newFmt.replace(/y+/, '(\\d+)');
    }
    if (fmt.indexOf('M') > -1) {
        posKey[fmt.indexOf('M')] = 'M';
        newFmt = newFmt.replace(/M+/, '(\\d+)');
    }
    if (fmt.indexOf('H') > -1) {
        posKey[fmt.indexOf('H')] = 'H';
        newFmt = newFmt.replace(/H+/, '(\\d+)');
    }
    if (fmt.indexOf('m') > -1) {
        posKey[fmt.indexOf('m')] = 'm';
        newFmt = newFmt.replace(/m+/, '(\\d+)');
    }
    var len = 0;
    for (var pos in posKey) {
        ++len;
    }
    let orderKey: any[] = new Array(len);
    for (var pos in posKey) {
        var order = 0;
        for (var pos1 in posKey) {
            if (parseInt(pos) > parseInt(pos1)) {
                ++order;
            }
        }
        orderKey[order] = posKey[pos];
    }
    let reg: RegExp = new RegExp(newFmt, 'g');
    if (reg.test(str)) {
        for (var i = 0; i < len; i++) {
            // 找到每一个数字对应的数据类型
            switch (orderKey[i]) {
                case 'y':
                    datetime.setFullYear(parseInt(eval('RegExp.$' + (i + 1))));
                    break;
                case 'M':
                    datetime.setMonth(parseInt(eval('RegExp.$' + (i + 1))) - 1);
                    break;
                case 'd':
                    datetime.setDate(parseInt(eval('RegExp.$' + (i + 1))));
                    break;
                case 'H':
                    datetime.setHours(parseInt(eval('RegExp.$' + (i + 1))));
                    break;
                case 'm':
                    datetime.setMinutes(parseInt(eval('RegExp.$' + (i + 1))));
                    break;
                case 's':
                    datetime.setSeconds(parseInt(eval('RegExp.$' + (i + 1))));
                    break;
                case 'S':
                    datetime.setMilliseconds(
                        parseInt(eval('RegExp.$' + (i + 1)))
                    );
                    break;
            }
        }
    }
    return datetime;
};
